package com.molan.molan_music.dao;

import com.molan.molan_music.entity.UserRole;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import javax.validation.constraints.*;
import java.util.List;

/**
* @author wj-easycode
*/

@Mapper
public interface UserRoleDao {

    /** 根据id查询记录
    *@param userId 代表主键id
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回一条记录 或者 null
    */
    UserRole getById(@NotNull @Param("theId")  String userId,
	                           @Param("tableSuffix") String tableSuffix);

    /** 根据条件对象和过滤条件进行分页查询
    *@param userRole 代表条件对象，非null字段是匹配型过滤参数
    *@param pageNum 页码 
    *@param pageSize 页的规模大小 
    *@param queryStr 过滤条件 类似sql中where后面的条件语句 
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回记录列表（列表可能是空的）
    */
    List<UserRole> listByEntity(@Param("pojo") UserRole userRole, 
	        @NotNull @Param("pageNum") Integer pageNum, 
			@NotNull @Param("pageSize") Integer pageSize,
			@Param("queryStr") String queryStr,
			@Param("tableSuffix") String tableSuffix);
	
	/** 根据条件对象和过滤条件进行查询，根据偏移和长度来取记录。
    *@param userRole 代表条件对象，非null字段是匹配型过滤参数
    *@param offsetNum 跳过最前这么多条记录
    *@param maxCount 最多取这么多条记录
    *@param queryStr 过滤条件 类似sql中where后面的条件语句 
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回记录列表（列表可能是空的）
    */
	List<UserRole> listByEntityWithOffsetWithMaxCount(@Param("pojo") UserRole userRole, 
	        @NotNull @Param("offsetNum") Integer offsetNum, 
			@NotNull @Param("maxCount") Integer maxCount,
			@Param("queryStr") String queryStr,
			@Param("tableSuffix") String tableSuffix);

    /** 根据条件对象来查询
    *@param userRole 代表条件对象，非null字段是匹配型过滤参数
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回一条记录，或者null。 
    *如果查询到，多于1条的记录，会抛出异常。
    */
    UserRole getByEntity(@Param("pojo") UserRole userRole,
			@Param("tableSuffix") String tableSuffix);


    /** 插入一条记录。
    *@param userRole 代表插入的对象 （如果对象的id字段的值为null，sql表又会自动生成id，那么id会回填到对象中。）
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回影响的记录数
    */
    int insert(@Param("pojo") @NotNull UserRole userRole,
			@Param("tableSuffix") String tableSuffix);

     /** 更新一条记录。所以一定记得填写id字段的值。
    *@param userRole 代表条件对象，按照id字段来过滤筛选，按照其他字段来更新。
    *@param updateIgnoreNull 更新的时候是否忽略条件对象的null字段，忽略就不去更新，不忽略就去更新（对应记录的相应列设置为NULL）。
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回影响的记录数
    */
    int update(@NotNull @Param("pojo")  UserRole userRole, @Param("updateIgnoreNull") boolean updateIgnoreNull,
			@Param("tableSuffix") String tableSuffix);

	 /** 更新记录。
    *@param where 代表条件对象，按照条件对象的非null的字段来过滤筛选.
    *@param queryStr 也按照条件语句 queryStr 来过滤筛选。相当于where后面的条件语句。
    *@param set 代表‘更新对象’，按照‘更新对象’的非null的字段的值来更新设置.
    *@param updateIgnoreNull 更新的时候是否忽略‘更新对象’的null字段，忽略就不去更新，不忽略就去更新（对应记录的相应列设置为NULL）。
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回影响的记录数
    */
    int updateByFieldAndQueryStr(@NotNull @Param("where") UserRole where, @NotNull @Param("set") UserRole set, @Param("queryStr") String queryStr , @Param("updateIgnoreNull") boolean updateIgnoreNull,
			@Param("tableSuffix") String tableSuffix);

    /** 按照id删除记录。
    *@param userId 代表id.
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回影响的记录数
    */
    int deleteById(@Param("theId") @NotNull String userId,
			@Param("tableSuffix") String tableSuffix);

    /** 按照条件对象来删除记录。
    *@param userRole 条件对象. 按照其非空字段来匹配过滤以删除。
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回影响的记录数
    */
    int deleteByEntity(@Param("pojo") @NotNull UserRole userRole,
			@Param("tableSuffix") String tableSuffix);
  
     /** 统计表的记录数。
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回记录数
    */
    int countAll(@Param("tableSuffix") String tableSuffix);
    
    /** 统计表符合条件的记录的条数。
    *@param userRole 条件对象. 按照其非空字段来匹配过滤。
    *@param queryStr 也按照条件语句 queryStr 来过滤筛选。相当于where后面的条件语句。
    *@param tableSuffix 代表表后缀 没有就填空字符串
    *@return 返回记录数
    */
    int countByEntity(@Param("pojo") UserRole userRole, @Param("queryStr") String queryStr,
			@Param("tableSuffix") String tableSuffix);
    
}



